package com.snail.clouds.framework.dto;

import lombok.Data;
import lombok.experimental.Accessors;
import com.snail.clouds.framework.entity.UserProfile;

import java.time.LocalDateTime;

/**
 * 用户信息DTO
 */
@Data
@Accessors(chain = true)
public class UserProfileDTO {
    /**
     * 用户ID
     */
    private Long id;
    
    /**
     * 用户编码
     */
    private String userCode;
    
    /**
     * 用户密码
     */
    private String password;
    
    /**
     * 用户昵称
     */
    private String nickname;
    
    /**
     * 用户角色(admin/user)
     */
    private String role;
    
    /**
     * 用户状态(active/inactive/suspended)
     */
    private String status;
    
    /**
     * 到期时间
     */
    private LocalDateTime expiresAt;
    
    /**
     * 最大存储空间(字节)
     */
    private Long maxStorage;
    
    /**
     * 已用存储空间(字节)
     */
    private Long usedStorage;
    
    /**
     * 创建时间
     */
    private LocalDateTime createdAt;
    
    /**
     * 更新时间
     */
    private LocalDateTime updatedAt;
    
    /**
     * 将UserProfile实体转换为UserProfileDTO
     * @param user 用户实体
     * @return 用户信息DTO
     */
    public static UserProfileDTO convert(UserProfile user) {
        if (user == null) {
            return null;
        }
        
        UserProfileDTO dto = new UserProfileDTO();
        dto.setId(user.getId());
        dto.setUserCode(user.getUserCode());
        dto.setPassword(user.getPassword());
        dto.setNickname(user.getNickname());
        dto.setRole(user.getRole());
        dto.setStatus(user.getStatus());
        dto.setExpiresAt(user.getExpiresAt());
        dto.setMaxStorage(user.getMaxStorage());
        dto.setUsedStorage(user.getUsedStorage());
        dto.setCreatedAt(user.getCreatedAt());
        dto.setUpdatedAt(user.getUpdatedAt());
        return dto;
    }
    
    /**
     * 将UserProfileDTO转换为UserProfile实体
     * @param dto 用户信息DTO
     * @return 用户实体
     */
    public static UserProfile convertToEntity(UserProfileDTO dto) {
        if (dto == null) {
            return null;
        }
        
        UserProfile user = new UserProfile();
        user.setId(dto.getId());
        user.setUserCode(dto.getUserCode());
        user.setPassword(dto.getPassword());
        user.setNickname(dto.getNickname());
        user.setRole(dto.getRole());
        user.setStatus(dto.getStatus());
        user.setExpiresAt(dto.getExpiresAt());
        user.setMaxStorage(dto.getMaxStorage());
        user.setUsedStorage(dto.getUsedStorage());
        user.setCreatedAt(dto.getCreatedAt());
        user.setUpdatedAt(dto.getUpdatedAt());
        return user;
    }
}